/*********************************
 * jQuery Validator I18N Support
 *********************************/
(function(factory) {
    'function' === typeof define && (define.amd || define.cmd) ? define(function(require, exports, module) {
        var $ = require('jquery') || jQuery;
        $._VALIDATOR_URI = module.uri;
        require('../jquery.validator.min')($);
        factory($);
    }) : factory(jQuery);
}(function($) {
    // Global configuration
    $.validator.config({
        // Custom rules
        rules: {
            digits: [/^\d+$/, "请填写数字！"],
            letters: [/^[a-z]+$/i, "请填写字母！"],
            date: [/^\d{4}-\d{2}-\d{2}$/, "请填写有效的日期，格式\:yyyy-mm-dd！"],
            time: [/^([01]\d|2[0-3])(:[0-5]\d){1,2}$/, "请填写有效的时间，00\:00到23\:59之间！"],
            email: [/^[\w\+\-]+(\.[\w\+\-]+)*@[a-z\d\-]+(\.[a-z\d\-]+)*\.([a-z]{2,4})$/i, "请填写有效的邮箱！"],
            url: [/^(https?|s?ftp):\/\/\S+$/i, "请填写有效的网址！"],
            qq: [/^[1-9]\d{4,}$/, "请填写有效的QQ号！"],
            IDcard: [/^\d{6}(19|2\d)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)?$/, "请填写有效的身份证号码！"],
            tel: [/^(?:(?:0\d{2,3}[\- ]?[1-9]\d{6,7})|(?:[48]00[\- ]?[1-9]\d{6}))$/,"请填写有效的电话号码！"],
            mobile: [/^1[3-9]\d{9}$/, "请填写有效的手机号！"],
            zipcode: [/^\d{6}$/,"请填写有效的邮政编码！"],
            chinese: [/^[\u0391-\uFFE5]+$/, "请填写中文字符！"],
            username: [/^\w{3,12}$/, "请填写3-12位数字、字母、下划线！"],
            password: [/^[\S]{6,16}$/, "请填写6-16位字符，不包含空格！"],
            accept: function(element, params) {
                if (!params)
                    return true;
                var ext = params[0], value = $(element).val();
                return (ext === '*') || (new RegExp(".(?:" + ext + ")$", "i")).test(value)
                    || this.renderMsg("只接受"+ext.replace(/\|/g, ',')+"后缀的文件！");
                
            }
        },
        // Default error messages
        messages: {
            0: "此处",
            fallback: "此处格式不正确！",
            loading: 0+"验证...",
            error: "网络异常！",
            timeout: "请求超时！",
            required: "{0}不能为空！",
            remote: "{0}已存在！",
            integer: {
                '*': "请填写整数！",
                '+': "请填写正整数！",
                '+0': "请填写正整数或0！",
                '-': "请填写负整数！",
                '-0': "请填写负整数或0！"
            },
            match: {
                eq: "{0}与{1}不一致！",
                neq: "{0}与{1}不能相同！",
                lt: "{0}必须小于{1}！",
                gt: "{0}必须大于{1}！",
                lte: "{0}不能大于{1}！",
                gte: "{0}不能小于{1}！"
            },
            range: {
                rg: "请填写{1}到{2}之间的数！",
                gte: "请填写不小于{1}的数！",
                lte: "请填写不大于{1}的数！",
                gtlt: "请填写{1}到{2}之间的数(不包含)！",
                gt: "请填写大于{1}的数！",
                lt: "请填写小于{1}的数！"
            },
            checked: {
                eq: "请选择{1}项！",
                rg: "请选择{1}到{2}项！",
                gte: "请至少选择{1}项！",
                lte: "请最多选择{1}项！"
            },
            length: {
                eq: "请填写{1}个字符！",
                rg: "请填写{1}到{2}个字符！",
                gte: "请至少填写{1}个字符！",
                lte: "请最多填写{1}个字符！"
            }
        }
    });
    // Themes
    var TPL_ARROW = '<span class="n-arrow"><b>◆</b><i>◆</i></span>';
    $.validator.setTheme({
        'simple_right': {
            formClass: 'n-simple',
            msgClass: 'n-right'
        },
        'simple_bottom': {
            formClass: 'n-simple',
            msgClass: 'n-bottom'
        },
        'yellow_top': {
            formClass: 'n-yellow',
            msgClass: 'n-top',
            msgArrow: TPL_ARROW
        },
        'yellow_right': {
            formClass: 'n-yellow',
            msgClass: 'n-right',
            msgArrow: TPL_ARROW
        },
        'yellow_right_effect': {
            formClass: 'n-yellow',
            msgClass: 'n-right',
            msgArrow: TPL_ARROW,
            msgShow: function($msgbox, type) {
                var $el = $msgbox.children();
                if ($el.is(':animated'))
                    return;
                if (type === 'error') {
                    $el.css({
                        left: '20px',
                        opacity: 0
                    }).delay(100).show().stop().animate({
                        left: '-4px',
                        opacity: 1
                    }, 150).animate({
                        left: '3px'
                    }, 80).animate({
                        left: 0
                    }, 80);
                } else {
                    $el.css({
                        left: 0,
                        opacity: 1
                    }).fadeIn(200);
                }
            },
            msgHide: function($msgbox, type) {
                var $el = $msgbox.children();
                $el.stop().delay(100).show().animate({
                    left: '20px',
                    opacity: 0
                }, 300, function() {
                    $msgbox.hide();
                });
            }
        }
    });
}));
